package com.xinghanlaser.applet.base.oss.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.xinghanlaser.applet.base.oss.constant.OssConstant;

import java.util.UUID;

/**
 * @description 提供OSS存储对象的相关模板
 * @author 阿爷
 * @createDate  2023/8/28
 * TODO OSS对象名的拼接格式为:
 *      objectName OSS中存储的完整对象名 ==> "年/月/日/完整对象名"
 *      assembleObjectName 完整对象名 ==> UUID-原来的对象名
 *      originalObjectName 原来的对象名 ==> 对象名(包括后缀)
 */
public class OssTemplateUtil {
    /**
     * 获取当前时间格式为: yyyy/MM/dd
     * @return 例 2023/4/18
     */
    private static String getDateFormat(){
        String formatStr = "yyyy" + OssConstant.URI_DELIMITER + "MM" + OssConstant.URI_DELIMITER + "dd";
        String formatDataStr = DateUtil.format(DateUtil.date(),formatStr);
        if(StrUtil.isBlank(formatDataStr)) throw new IllegalArgumentException("获取当前日期格式失败");
        return formatDataStr;
    }

    /**
     * 获取完整的对象名
     * @param objectName OSS保存的对象名称
     * @return UUID-上传的对象名.对象后缀
     */
    public static String getAssembleObjectName(String objectName){
        if(StrUtil.isBlank(objectName)) throw new IllegalArgumentException("非法文件名称");
        String[] a =  objectName.split(OssConstant.URI_DELIMITER);
        return a[a.length-1];
    }

    /**
     * 获取OSS中存储的完整对象名
     * @param originalObjectName 上传的原始对象名(包括后缀)
     * @return
     */
    public static String getObjectName(String originalObjectName){
        String objectName = getDateFormat() +
                            OssConstant.URI_DELIMITER +
                            UUID.randomUUID().toString() +
                            "-" +
                            originalObjectName;

        return objectName;
    }

}
